package main

import (
	"fmt"
	"reflect"
)

type User struct {
	Id   int
	Name string
	Age  int
}

func main() {
	var num = 1.2
	var obj interface{}
	//可以直接将变量设置为interface{}类型，之后可以赋给其任何结构体对象
	//不赋值的情况，其值是nil
	var obj1 interface{}
	obj = User{}
	//获取变量的实际类型信息，而不是声明时候的数据类型
	fmt.Println(reflect.TypeOf(num))
	fmt.Println(reflect.TypeOf(obj))
	//reflect.TypeOf()方法返回的类型是Type，
	//这个接口有个方法Kind()，返回的是当前对象所归属的类型分类
	//type代表类型，kind代表类型分类.
	//举个例子是所有的自定义的接口提，类型都是自定义的，但是归属分类是struct
	fmt.Println(reflect.TypeOf(obj).Kind())
	//nil,nil 没有实际类型的变量typeof也会返回为nil
	fmt.Println(obj1, reflect.TypeOf(obj1))
}
